package com.cskaoyan.controller;

import com.cskaoyan.bean.common.BasePageInfo;
import com.cskaoyan.bean.common.BaseRespVo;
import com.cskaoyan.bean.common.CommonData;
import com.cskaoyan.bean.common.User;
import com.cskaoyan.exception.ValidationException;
import com.cskaoyan.service.UserService;
import com.cskaoyan.util.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * @author stone
 * @date 2022/06/25 11:05
 */
@RestController
@RequestMapping("admin/user")
public class AdminUserController {

    @Autowired
    UserService userService;

    /*@RequestMapping("list")
    public BaseRespVo list(Integer page,Integer limit, String sort,String order) {

    }*/

    //admin/user/list?page=1&limit=20&sort=add_time&order=desc
    //&username=user
    @RequestMapping("list")
    //public BaseRespVo list(String username, Integer page, Integer limit, String sort, String order) {
    public BaseRespVo list(String username, BasePageInfo info) {
        CommonData<User> data =  userService.query(username,info);
        return BaseRespVo.ok(data);
    }


    //localhost:8083/admin/user/valid?username=songge&password=ligenli
    @RequestMapping("valid")
    //public BaseRespVo valid(String username,String password) {//handlerAdapter
    public BaseRespVo valid(@Valid com.cskaoyan.bean.valid.User user, BindingResult bindingResult) throws ValidationException {
        //引用类型对象中的成员变量对应的就是请求参数
        // 对请求参数做校验
        // 请求参数=成员变量值
        // 对成员变量的值做校验，实际上就是对请求参数做校验呢？

        // 耦合关系更容易建立，对成员变量做耦合更方便
        // 注解
        // 在成员变量上增加注解，说明要做校验
        // 增加不同的注解，意味着做不同功能的校验
        // 如果增加了相同的注解，意味着做了相同的业务逻辑判断 → 复用


        //如果要判断username和password的长度
        /*if (username == null || username.length() < 6) {
            return BaseRespVo.invalidParameter("无效参数");
        }
        if (password == null || password.length() < 6) {
            return BaseRespVo.invalidParameter("无效参数");
        }*/

        // 处理校验结果
        /*BaseRespVo msg = ValidationUtil.valid(bindingResult);
        if (msg != null) return msg;*/

        //改造2
        ValidationUtil.valid2(bindingResult);

        // 改造3 AspectJ → 切入点 @annotation
        // joinpoint.getArgs → 判断里面是否有BindingResult

        // 正式的业务代码
        return BaseRespVo.ok(null);
    }


}
